package leetcode.editor.cn.dsa09_doublequeue;
//给定一个字符串，逐个翻转字符串中的每个单词。
//
// 说明： 
// 无空格字符构成一个 单词 。
// 输入字符串可以在前面或者后面包含多余的空格，但是反转后的字符不能包括。 
// 如果两个单词间有多余的空格，将反转后单词间的空格减少到只含一个。 
//
// 示例 1： 
// 输入："the sky is blue"
//输出："blue is sky the"
// 
// 示例 2：
// 输入："  hello world!  "
//输出："world! hello"
//解释：输入字符串可以在前面或者后面包含多余的空格，但是反转后的字符不能包括。
// 
// 示例 3：
// 输入："a good   example"
//输出："example good a"
//解释：如果两个单词间有多余的空格，将反转后单词间的空格减少到只含一个。
// 
// 示例 4：
//
// 输入：s = "  Bob    Loves  Alice   "
//输出："Alice Loves Bob"
// 
// 示例 5：
// 输入：s = "Alice does not even like bob"
//输出："bob like even not does Alice"
// 
// 提示：
// 1 <= s.length <= 104
// s 包含英文大小写字母、数字和空格 ' ' 
// s 中 至少存在一个 单词 
//
// 进阶： 
// 请尝试使用 O(1) 额外空间复杂度的原地解法
// 
// Related Topics 字符串 


import java.util.*;

public class ReverseWordsInAString151 {
    public static void main(String[] args) {
        Solution solution = new ReverseWordsInAString151().new Solution();
        System.out.println(solution.reverseWords("the sky is blue"));
        System.out.println(solution.reverseWords("  hello world!  "));
        System.out.println(solution.reverseWords("a good   example"));
        System.out.println(solution.reverseWords("  Bob    Loves  Alice   "));
    }

    //leetcode submit region begin(Prohibit modification and deletion)
    class Solution {
        /**
         * 解法一：暴力解法 使用语言特性实现思路
         * 1.将字符串按空格切割成单词数组
         * 2.翻转单词顺序
         *   使用数组工具类转成集合
         *   使用集合工具类进行翻转
         * 3.重新将单词与空格拼接成新字符串
         *   使用String类的静态方法join进行拼接
         *
         * @param s
         * @return
         */
        public String reverseWords(String s) {
            if (s == null || "".equals(s = s.trim())) {
                return "";
            }
            // 1.将字符串按空格切割成单词数组
            // 正则匹配多个空格
            String[] strings = s.split("\\s+");
            // 2.翻转单词顺序
            // 数组、集合工具类的使用
            List<String> list = Arrays.asList(strings);
            Collections.reverse(list);
            // 3.重新将单词与空格拼接成字符串
            return String.join(" ", list);
        }
    }
    //leetcode submit region end(Prohibit modification and deletion)
}
